package com.springboot_blog.enums;

import lombok.AllArgsConstructor;
import lombok.Getter;

/**
 * 错误码枚举类
 */
@Getter
@AllArgsConstructor
public enum ErrorCodeEnum {

    // 系统相关错误 1xxx
    SYSTEM_ERROR(1000, "系统异常"),
    PARAM_ERROR(1001, "参数错误"),
    DATA_NOT_FOUND(1002, "数据不存在"),

    // 认证相关错误 2xxx
    LOGIN_ERROR(2001, "用户名或密码错误"),
    LOGIN_ATTEMPTS_EXCEEDED(2002, "登录尝试次数过多，请30分钟后再试"),
    ACCOUNT_DISABLED(2003, "账户已被禁用，请联系管理员"),
    TOKEN_INVALID(2004, "令牌无效"),
    TOKEN_EXPIRED(2005, "令牌已过期"),
    UNAUTHORIZED(2006, "未授权访问"),
    FORBIDDEN(2007, "权限不足"),

    // 用户相关错误 3xxx
    USER_NOT_FOUND(3001, "用户不存在"),
    USER_ALREADY_EXISTS(3002, "用户已存在"),
    USER_ROLE_ERROR(3003, "用户角色信息异常"),
    PASSWORD_ERROR(3004, "密码错误"),


    // 业务相关错误 4xxx
    POST_NOT_FOUND(4001, "文章不存在"),
    CATEGORY_NOT_FOUND(4002, "分类不存在"),
    TAG_NOT_FOUND(4003, "标签不存在"),
    COMMENT_NOT_FOUND(4004, "评论不存在"),

    // 文件相关错误 5xxx
    FILE_UPLOAD_ERROR(5001, "文件上传失败"),
    FILE_TYPE_ERROR(5002, "文件类型不支持"),
    FILE_SIZE_ERROR(5003, "文件大小超出限制"),

    // 验证相关错误 6xxx
    VALIDATION_ERROR(6001, "数据验证失败"),
    CAPTCHA_ERROR(6002, "验证码错误"),
    EMAIL_FORMAT_ERROR(6003, "邮箱格式错误"),
    PASSWORD_NOT_MATCH(6004, "两次输入的密码不一致"),
    EMAIL_ALREADY_EXISTS(6005,"邮箱已存在");

    /**
     * 错误码
     */
    private final Integer code;

    /**
     * 错误信息
     */
    private final String message;

    /**
     * 根据错误码获取枚举
     */
    public static ErrorCodeEnum getByCode(Integer code) {
        for (ErrorCodeEnum errorCode : ErrorCodeEnum.values()) {
            if (errorCode.getCode().equals(code)) {
                return errorCode;
            }
        }
        return SYSTEM_ERROR;
    }
}
